#include<iostream>
#include<string>
#include<vector>
#include<stack>
using namespace std;

// class Solution {
// public:
//     int monotoneIncreasingDigits(int N) {
//         if(N<10){
//             return N;
//         }
//         for(int i = N;i>=0;i--){
//             string temp = to_string(i);
//             bool F = true;
//             if(i<10){
//                 return i;
//             }
//             for(int j =0;j<temp.size()-1;j++){
//                 if(temp[j]<=temp[j+1]){
//                     continue;
//                 }
//                 else{
//                     F = false;
//                     break;
//                 }
//             }
//             if(F){
//                 return atoi(temp.c_str());
//             }
//         }
//         return 0;
//     }
// };

class Solution {
public:
    int monotoneIncreasingDigits(int N) {
        string tempN = to_string(N);
        int maxvalue = INT16_MIN;
        int index = 0;
        for(int i=0;i<tempN.size()-1;i++){
            int value = tempN[i]-'0';
            if(maxvalue<value){
                index = i;
                maxvalue = value;
            }
            if(tempN[i]>tempN[i+1]){
                tempN[index] = char('0'+int(tempN[index]-'0')-1);
                for(int j = index+1;j<tempN.size();j++){
                    tempN[j] = '9';
                }
                break;
            }
        }
        return atoi(tempN.c_str());
    }
};

int main(){
    Solution S;
    cout<<S.monotoneIncreasingDigits(332)<<endl;
    
}
